package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.PositionInfoAddDTO;
import org.jsola.hr.dto.PositionInfoUpdateDTO;
import org.jsola.hr.query.PositionInfoQuery;
import org.jsola.hr.vo.EmpAllInfoVO;
import org.jsola.hr.vo.PositionInfoListVO;
import org.jsola.hr.vo.PositionInfoVO;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * @author zhr
 */
@Api(tags = "hr-岗位信息")
public interface IPositionInfoControllerAPI {

    /**
     * 新增岗位信息
     * @param positionInfoAddDTO 岗位信息新增实体
     * @return 岗位信息展示对象
     */
    @ApiOperation(value = "新增岗位信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoAddDTO", dataType = "PositionInfoAddDTO", value = "新增岗位信息", paramType = "body")
    })
    Result<PositionInfoVO> save(PositionInfoAddDTO positionInfoAddDTO);


    /**
     * 修改岗位信息
     * @param positionInfoUpdateDTO 岗位信息
     * @return 更新数量
     */
    @ApiOperation(value = "修改岗位信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoUpdateDTO", dataType = "PositionInfoUpdateDTO", value = "修改岗位信息", paramType = "body")
    })
    Result<Integer> update(PositionInfoUpdateDTO positionInfoUpdateDTO);




    /**
     * 删除单个岗位信息，彻底删除
     * @param positionInfoId 岗位信息id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个岗位信息，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoId", dataType = "String", value = "岗位信息id", paramType = "path")
    })
    Result<Integer> delete(String positionInfoId);


    /**
     * 批量删除岗位信息，彻底删除
     * @param positionInfoIds 岗位信息id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除岗位信息，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoIds", dataType = "String[]", value = "岗位信息id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] positionInfoIds);


    /**
     * 根据岗位信息id查询岗位信息详情
     * @param positionInfoId 岗位信息id
     * @return 岗位信息详情
     */
    @ApiOperation(value="根据岗位信息id查询岗位信息详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoId", dataType = "String", value = "岗位信息id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<PositionInfoVO> findById(String positionInfoId, String companyId);


    /**
     * 查询岗位信息
     * @param positionInfoQuery 岗位信息查询参数
     * @return page
     */
    @ApiOperation(value="查询岗位信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoQuery", dataType = "PositionInfoQuery", value = "岗位信息查询参数", paramType = "query")
    })
    Result<List<PositionInfoListVO>> listAll(PositionInfoQuery positionInfoQuery);


     /**
     * 分页查询岗位信息
     * @param positionInfoQuery 岗位信息查询参数
     * @return page
     */
    @ApiOperation(value="分页查询岗位信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoQuery", dataType = "PositionInfoQuery", value = "岗位信息查询参数", paramType = "query")
    })
    Result<Page<PositionInfoListVO>> page(PositionInfoQuery positionInfoQuery);

    /**
     * 分页查询岗位相关信息
     * @param positionInfoQuery 岗位信息查询参数
     * @return page
     */
    @ApiOperation(value="分页查询岗位相关信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoQuery", dataType = "PositionInfoQuery", value = "岗位信息查询参数", paramType = "query")
    })
    Result<Page<PositionInfoListVO>> getPositionInfoListPage(PositionInfoQuery positionInfoQuery);


    /**
     * 查询公司下岗位类型
     *
     * @param companyId 公司id
     */
    @ApiOperation(value = "查询公司下岗位类型")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<PositionInfoListVO>> listPositionTypeByCompanyId(String companyId);


    /**
     * 查询岗位树形列表
     * @param positionInfoQuery 岗位信息查询参数
     * @return List<PositionInfoListVO>
     */
    @ApiOperation(value="查询岗位树形列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionInfoQuery", dataType = "PositionInfoQuery", value = "岗位信息查询参数", paramType = "query")
    })
    Result<List<PositionInfoListVO>> listTree(PositionInfoQuery positionInfoQuery);

    /**
     * 根据员工id查询岗位信息详情
     * @param empInfoId 员工id
     * @return 岗位信息详情
     */
    @ApiOperation(value="根据岗位信息id查询岗位信息详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empInfoId", dataType = "String", value = "员工id", paramType = "path"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<EmpAllInfoVO> findByEmpId(@PathVariable String empInfoId, String companyId);


}

